package gamepad;

import gamepad.vistas.VistaGamePad;
import gamepad.vistas.VistaPrincipal;

import java.io.IOException;

import mobilefeel.AndroidDevice;

import org.flypad.joystick.JoystickException;


public class Controlador {

	private VistaPrincipal vista;
	private GamePadManager manager;
	
	public Controlador() {
		manager = new GamePadManager(this);
		
		vista = new VistaPrincipal(this);
		vista.setLocationRelativeTo(null);
		vista.setVisible(true);
	}

	public void doIniciar(int puerto) throws IOException {
		manager.iniciar(puerto);
		vista.setEstado("Escuchando en puerto " + puerto + "...");
	}

	public void doDetener() throws IOException  {
		manager.detener();
		vista.setEstado("Servidor detenido");
	}

	public int doDispositivoConectado(AndroidDevice device) {
		vista.setEstado("Conexión entrante de " + device.toString());
		return vista.agregarDispositivo(device);
	}
	
	public void doDispositivoInicializado() {
		vista.actualizarLista();
	}

	public void doDispositivoDesconectado(AndroidDevice device) {
		vista.setEstado(device.toString() + " desconectado");
		vista.desconectarDispositivo(device);
	}

	public void doErrorCrearJoystick(AndroidDevice device) {
		vista.errorCrearJoystick(device);
	}

	public void doDesconectar(AndroidDevice device) throws IOException {
		manager.desconectar(device);
	}

	public void doIntercambiar(AndroidDevice device1, AndroidDevice device2) throws JoystickException {
		vista.desconectarDispositivo(device1);
		vista.desconectarDispositivo(device2);
		manager.setJoystickNum(device2, vista.agregarDispositivo(device2));
		manager.setJoystickNum(device1, vista.agregarDispositivo(device1));
	}

	public void doConfigurar(AndroidDevice device) {
		GamePad gamepad = manager.getGamePad(device);
		if (gamepad != null) {
			VistaGamePad vistaGamePad = new VistaGamePad(vista, true, gamepad);
			vistaGamePad.setTitle("Configurar " + device.toString());
			vistaGamePad.setLocationRelativeTo(null);
			vistaGamePad.setVisible(true);
		}
	}

	public void doSalir() throws IOException {
		manager.salir();
	}

	public void doErrorGuardarXml() {
		vista.errorGuardarXml();
	}

	public void doErrorCargarXml() {
		vista.errorCargarXml();
	}

	public void doErrorConexion() {
		vista.errorConexion();
	}

	public int getJoystickNum(AndroidDevice device) {
		int num = 0;
		GamePad gamepad = manager.getGamePad(device);
		if (gamepad != null)
			num = gamepad.getJoystickNum();
		return num;
	}
	
}
